﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

//void GetMemory(char* p)
//{
//	p = (char*)malloc(100);
//}
//void Test1(void)
//{
//	char* str = NULL;
//	GetMemory(str);
//	strcpy(str, "hello world");
//	printf(str);
//}
//int main()
//{
//	Test1();
//	return 0;
//}



//char* GetMemory(void)
//{
//	char p[] = "hello world";
//	return p;
//}
//void Test(void)
//{
//	char* str = NULL;
//	str = GetMemory();
//	printf(str);
//}
//
//int main()
//{
//	Test();
//	return 0;
//}

//void GetMemory(char** p, int num)
//{
//	*p = (char*)malloc(num);
//}
//void Test(void)
//{
//	char* str = NULL;
//	GetMemory(&str, 100);
//	strcpy(str, "hello");
//	printf(str);
//}
//int main()
//{
//	Test();
//	return 0;
//}

//void Test(void)
//{
//	char* str = (char*)malloc(100);
//	strcpy(str, "hello");
//	free(str);
//	if (str != NULL)
//	{
//		strcpy(str, "world");
//		printf(str);
//	}
//}
//int main()
//{ 
//	Test();
//	return 0;
//}

//柔性数组

//int main() {
//    int n;
//    printf("请输入数组长度：");
//    scanf("%d", &n);
//
//    int arr[n];  // 变长数组：长度由变量 n 决定（运行时确定）
//
//    // 使用变长数组
//    
//    return 0;
//}

//C99中，结构中的最后⼀个元素允许是未知⼤⼩的数组，这就叫做『柔性数组』成员。
//typedef struct S
//{
//	int n;
//	int arr[];
//}s;
//
//int main()
//{
//	printf("%zd\n", sizeof(s));
//	s* p = (s *)malloc(4 + 10 * sizeof(int));//拓展空间
//	
//	//使用柔性数组
//
//	p->n = 100;
//	int i = 10;
//	for (i = 0;i < 10;i++)
//	{
//		p->arr[i] = i + 1;
//	}
//	//内存释放
//	free(p);
//	p = NULL;
//	return 0;
//}

typedef struct S
{
	int i;
	int * ps;
}s;

int main()
{
	printf("%zd\n", sizeof(s));
	s* p = (s*)malloc(sizeof(s));//动态分配结构体内存
	p -> i = 100;
	int* ps = (int*)malloc(p->i * sizeof(int));
	//使用柔性数组

	
	//内存释放
	free(p -> ps);
	p -> ps = NULL;
	free(p);
	return 0;
}
